import random


# 实现一千个数的去重（数的范围在0-10000之间）
class BitMap:
    def __init__(self, arr_len):
        self.bitmap = 0  # 找了个整形数，用来做位图计数
        self.arr = []
        self.arr_len = arr_len
        self.newarr = []

    def random_list(self):
        for i in range(self.arr_len):
            self.arr.append(random.randint(0, 10000))

    # 去重函数
    def dupicate_remove(self):
        for i in self.arr:
            # 按位与真，则说明以前有这个值了，所以pass，去重不要它
            if self.bitmap & 1 << i:
                pass
            # 按位与假，则说明是第一次出现这个数，所以要加上
            else:
                self.newarr.append(i)
                self.bitmap = self.bitmap | 1 << i
                # 在位图中要对新来的数做标记，用按位或，因为以前没有这个数位图中为0，现在有了这个数，就应该变成1


if __name__ == '__main__':
    b = BitMap(1000)
    b.random_list()
    print(b.arr)
    b.dupicate_remove()
    print(b.newarr)
